导航:
论坛 -> 数据库专区
斑竹:liumazi,waterstone
作者:
sxfgf (FC_FGF)
★☆☆☆☆
-
普通会员
2024/4/23 14:36:03
标题:
COUNT 字段不正确或语法错误??
浏览:438
加入我的收藏
楼主:
sqltext:='exec dbo.FC_B_Product_BasicInfo :@PD,:@P_ParentID,:@P_ID,:@P_Code,:@P_Name,:@P_standards,:@P_model,:@P_brand,:@P_producer,:@P_material,'; sqltext:=sqltext+':@P_AuxiliarySupervisionNum,:@P_AuxiliarySupervisionPW,:@P_OUTID output '; ClientModule1.ClientDataSet1.Close; ClientModule1.ClientDataSet1.CommandText:=sqltext; ClientModule1.ClientDataSet1.Params.Clear; ClientModule1.ClientDataSet1.Params.CreateParam(ftInteger,'@PD',ptInput); ClientModule1.ClientDataSet1.Params.CreateParam(ftInteger,'@P_ParentID',ptInput); ClientModule1.ClientDataSet1.Params.CreateParam(ftInteger,'@P_ID',ptInput); ClientModule1.ClientDataSet1.Params.CreateParam(ftString,'@P_Code',ptInput); ClientModule1.ClientDataSet1.Params.CreateParam(ftString,'@P_Name',ptInput); ClientModule1.ClientDataSet1.Params.CreateParam(ftString,'@P_standards',ptInput); ClientModule1.ClientDataSet1.Params.CreateParam(ftString,'@P_model',ptInput); ClientModule1.ClientDataSet1.Params.CreateParam(ftInteger,'@P_brand',ptInput); ClientModule1.ClientDataSet1.Params.CreateParam(ftString,'@P_producer',ptInput); ClientModule1.ClientDataSet1.Params.CreateParam(ftString,'@P_material',ptInput); ClientModule1.ClientDataSet1.Params.CreateParam(ftInteger,'@Defeat_Caigou',ptInput); ClientModule1.ClientDataSet1.Params.CreateParam(ftInteger,'@Defeat_Gongyingshang',ptInput); ClientModule1.ClientDataSet1.Params.CreateParam(ftInteger,'@P_ColourProgramme',ptInput); ClientModule1.ClientDataSet1.Params.CreateParam(ftString,'@P_AuxiliarySupervisionNum',ptInput); ClientModule1.ClientDataSet1.Params.CreateParam(ftString,'@P_AuxiliarySupervisionPW',ptInput); ClientModule1.ClientDataSet1.Params.CreateParam(ftInteger,'@P_OUTID',ptoutput ); ClientModule1.ClientDataSet1.Params.ParamByName('@PD').Value:=1; // @PD int, --判断是新增1 修改2 删除 3 ClientModule1.ClientDataSet1.Params.ParamByName('@P_ParentID').Value:=StrToInt(PID); // @P_ParentID int, ClientModule1.ClientDataSet1.Params.ParamByName('@P_ID').Value:=StrToInt(SID); //@P_ID int, ClientModule1.ClientDataSet1.Params.ParamByName('@P_Code').Value:=Edit1.Text; //@P_Code [varchar] (100)='', ClientModule1.ClientDataSet1.Params.ParamByName('@P_Name').Value:=Edit2.Text; //@P_Name [varchar] (200)='', ClientModule1.ClientDataSet1.Params.ParamByName('@P_standards').Value:=Edit4.Text; //@P_standards [varchar] (200)='', ClientModule1.ClientDataSet1.Params.ParamByName('@P_model').Value:=Edit5.Text; //@P_model [varchar] (200)='', ClientModule1.ClientDataSet1.Params.ParamByName('@P_brand').Value:=brand; //@P_brand int =0, --品牌***** ClientModule1.ClientDataSet1.Params.ParamByName('@P_producer').Value:=Edit7.Text; //@P_producer [varchar] (100)='', --产地 ClientModule1.ClientDataSet1.Params.ParamByName('@P_material').Value:=Edit31.Text; //@P_material [varchar] (200)='', ClientModule1.ClientDataSet1.Params.ParamByName('@P_package').Value:=Edit12.text; //@P_package [varchar] (100)='', ClientModule1.ClientDataSet1.Params.ParamByName('@Defeat_Caigou').Value:=Def_CaiGou; //@Defeat_Caigou int=0, ClientModule1.ClientDataSet1.Params.ParamByName('@Defeat_Gongyingshang').Value:=Def_Gongyingshang; //@Defeat_Gongyingshang int=0, ClientModule1.ClientDataSet1.Params.ParamByName('@P_ColourProgramme').Value:=colourpro; //@P_ColourProgramme int=0,--颜色方案 ClientModule1.ClientDataSet1.Params.ParamByName('@P_AuxiliarySupervisionNum').Value:=Edit28.Text; //@P_AuxiliarySupervisionNum [varchar] (100)='',--辅助监管企业号 ClientModule1.ClientDataSet1.Params.ParamByName('@P_AuxiliarySupervisionPW').Value:=Edit29.Text; //@P_AuxiliarySupervisionPW [varchar](50)='', --辅助监管密码 //ClientModule1.ClientDataSet1.ParamByName('@P_OUTID').Value:=0; ClientModule1.ClientDataSet1.Execute; CurPID:=ClientModule1.ClientDataSet1.Params.ParamByName('@P_OUTID').Value; 执行的时候,提示:COUNT 字段不正确或语法错误 到底是哪里出了问题?
----------------------------------------------
偶尔做做代码应付一下工作,却发现Delphi已成必配
作者:
sxfgf (FC_FGF)
★☆☆☆☆
-
普通会员
2024/4/23 14:47:58
1楼:
原来用的简单: sqltext:='exec dbo.FC_B_Product_BasicInfo :p1,:p2,:p3,:p4,:p5,:p6,:p7,:p8,:p9,:p10'; sqltext:=sqltext+',:p11,:p12,:p13,:p14,:p15,:p16,:p17,:p18,:p19,:p20,:p21,:p22'; sqltext:=sqltext+',:p23,:p24,:p25,:p26,:p27,:p28,:p29,:p30,:p31,:p32,:p33,:p34'; sqltext:=sqltext+',:p35,:p36,:p37,:p38,:p39,:p40,:p41,:p42,:p43,:p44,:p45,:p46'; sqltext:=sqltext+',:p47,:p48,:p49,:p50,:p51,:p52,:p53,:p54,:p55'; ClientModule1.ClientDataSet1.Close; ClientModule1.ClientDataSet1.CommandText:=sqltext; ClientModule1.ClientDataSet1.ParamByName('p1').AsInteger:=1; // @PD int, --判断是新增1 修改2 删除 3 ClientModule1.ClientDataSet1.ParamByName('p2').AsInteger:=StrToInt(PID); // @P_ParentID int, ClientModule1.ClientDataSet1.ParamByName('p3').AsInteger:=StrToInt(SID); //@P_ID int, ClientModule1.ClientDataSet1.ParamByName('p4').AsString:=Edit1.Text; //@P_Code [varchar] (100)='', ClientModule1.ClientDataSet1.ParamByName('p5').AsString:=Edit2.Text; //@P_Name [varchar] (200)='', ClientModule1.ClientDataSet1.ParamByName('p6').AsString:=Edit4.Text; //@P_standards [varchar] (200)='', ClientModule1.ClientDataSet1.ParamByName('p7').AsString:=Edit5.Text; //@P_model [varchar] (200)='', ClientModule1.ClientDataSet1.ParamByName('p8').AsInteger:=brand; //@P_brand int =0, --品牌***** ClientModule1.ClientDataSet1.ParamByName('p9').AsString:=Edit7.Text; //@P_producer [varchar] (100)='', --产地 ClientModule1.ClientDataSet1.ParamByName('p10').AsString:=Edit31.Text; //@P_material [varchar] (200)='', ClientModule1.ClientDataSet1.ParamByName('p11').AsString:=Edit12.text; //@P_package [varchar] (100)='', 的方法是没有问题的,现在只是为了返回新插入记录的ID值返回到Delphi中
----------------------------------------------
偶尔做做代码应付一下工作,却发现Delphi已成必配
作者:
2024/4/23 15:00:03
2楼:
编码好粗糙呀 多用with do,看起来可读性高一点 with ClientModule1.ClientDataSet1 do begin Close; CommandText:=sqltext; end;
----------------------------------------------
123
作者:
sxfgf (FC_FGF)
★☆☆☆☆
-
普通会员
2024/4/23 15:22:24
3楼:
我这个是截取一部分,代码太长了,光字段就几十个,Try也没复制到帖子里 使用的方法: sqltext:='exec dbo.FC_B_Product_BasicInfo :@PD,:@P_ParentID,.... :@P_OUTID output '; ClientModule1.ClientDataSet1.Close; ClientModule1.ClientDataSet1.CommandText:=sqltext; ClientModule1.ClientDataSet1.Params.Clear; ClientModule1.ClientDataSet1.Params.CreateParam(ftInteger,'@PD',ptInput); ClientModule1.ClientDataSet1.Params.CreateParam(ftInteger,'@P_OUTID',ptoutput ); ......... ClientModule1.ClientDataSet1.Params.ParamByName('@PD').Value:=1; ......... ClientModule1.ClientDataSet1.Execute; CurPID:=ClientModule1.ClientDataSet1.Params.ParamByName('@P_OUTID').Value;
----------------------------------------------
偶尔做做代码应付一下工作,却发现Delphi已成必配
作者:
2024/4/23 15:23:04
3楼:
语句和参数都没错,那就需要看看存储过程里是怎么写的了。
----------------------------------------------
-
作者:
sxfgf (FC_FGF)
★☆☆☆☆
-
普通会员
2024/4/23 16:10:55
4楼:
存储过程,在附件里
----------------------------------------------
偶尔做做代码应付一下工作,却发现Delphi已成必配
作者:
sxfgf (FC_FGF)
★☆☆☆☆
-
普通会员
2024/4/23 16:12:40
5楼:
请帮忙给看看
----------------------------------------------
偶尔做做代码应付一下工作,却发现Delphi已成必配
作者:
2024/4/23 17:36:43
6楼:
@P_PrintName [varchar] (200)='', 。。。。。。。。。 @P_OUTID [integer] OUTPUT 这几个火星点是什么作用?
----------------------------------------------
delphi界写python最强, python界写delphi最强. 写自己的代码, 让别人去运行.
作者:
2024/4/23 18:28:59
7楼:
几十个参数还是字段?几十个参数的存过是怎么些出来的? 你这个实在太乱了。 而且参数传递根本不用这样写。 不过有一条是值得肯定的,越长的代码越不要用with,不然到时候连你自己都看不懂。
----------------------------------------------
--
作者:
sxfgf (FC_FGF)
★☆☆☆☆
-
普通会员
2024/4/23 19:43:53
8楼:
回6楼,是省略号,表示冗余的没必要都贴出来
----------------------------------------------
偶尔做做代码应付一下工作,却发现Delphi已成必配
作者:
sxfgf (FC_FGF)
★☆☆☆☆
-
普通会员
2024/4/23 19:45:26
9楼:
回7楼,几时个参数是给存储过程传递值,然后在存储过程中写入数据库表里 请教,应该怎么写呢?
----------------------------------------------
偶尔做做代码应付一下工作,却发现Delphi已成必配
作者:
2024/4/23 21:37:30
10楼:
这段代码没有错,所以我怀疑是不是存储过程有问题,后来打开存储过程,发现有乱码看不太清楚,因此,我想,你还是不要写得太多,用一两个参数试一下,其它的参数用一些常量写在存储过程中,将问题缩小,再试试看。
----------------------------------------------
-
作者:
2024/4/23 22:39:56
11楼:
这么多重复的代码,你从没有想过要简化一下的么? type TADOQueryHelper = class helper for TADOQuery public procedure OpenWith(const pParameters: array of Variant); function ExecuteWith(const pParameters: array of Variant): Integer; end; ... { TADOQueryHelper } function TADOQueryHelper.ExecuteWith(const pParameters: array of Variant): Integer; var i: Integer; begin Self.Parameters.Clear(); for i := Low(pParameters) to High(pParameters) do begin Self.Parameters.AddParameter(); Self.Parameters[i].Name := i.ToString(); Self.Parameters[i].Value := pParameters[i]; end; Result := Self.ExecSQL(); end; procedure TADOQueryHelper.OpenWith(const pParameters: array of Variant); var i: Integer; begin Self.Parameters.Clear(); for i := Low(pParameters) to High(pParameters) do begin Self.Parameters.AddParameter(); Self.Parameters[i].Name := i.ToString(); Self.Parameters[i].Value := pParameters[i]; end; Self.Open(); end; ========== procedure TForm1.Button1Click(Sender: TObject); begin ADOQuery1.Close(); ADOQuery1.SQL.Text := 'insert into t_test(ins, name) values(?, ?)'; ADOQuery1.ExecuteWith([StrToInt(Edit1.Text), Edit2.Text]); end; 差不多就是这么个意思,大概意思通了就行了。 不过你这个存过能有这么多参数,我觉得你要在设计上找一找,是不是哪里不合理。
----------------------------------------------
--
作者:
sxfgf (FC_FGF)
★☆☆☆☆
-
普通会员
2024/4/25 9:47:14
12楼:
感谢bahamut8348,感谢大家的支持 我原来是为了与数据库中的字段对应上,所以把参数的名称也写成了带@号,把@去掉之后执行没有问题,返回值也对了。 就像bahamut8348那样的确会少不少代码,谢谢
----------------------------------------------
偶尔做做代码应付一下工作,却发现Delphi已成必配